home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
misc
/
avmnfaxsrc1_33.lha
/
myinit.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-15
|
3KB
|
138 lines
/* $Id: init.c,v 1.2 1993/06/11 16:29:21 Rhialto Exp $
* $Log: init.c,v $
* Revision 1.2 1993/06/11 16:29:21 Rhialto
* First real RCS checkin
*
*/
/*
* INIT.C
*/
#include "defs.h"
#include <clib/alib_protos.h>
#include "exec/types.h"
#include "devices/printer.h"
#include "devices/prtbase.h"
Prototype void DevInit(void);
Prototype void DevExpunge(void);
Prototype int MsgRender(long ct, long x, long y, long status);
extern struct PrinterData *PD;
extern struct PrinterExtendedData *PED;
/*
* The message interface.
*/
struct PrtMsg {
struct Message pm_Msg;
long pm_Type;
#define PM_RENDER 1
#define PM_OPEN 2
#define PM_CLOSE 3
#define PM_DOSPECIAL 4
#define PM_CONVFUNC 5
};
#define pm_rc pm_Type
struct RenderMsg {
struct PrtMsg rm_PrtMsg;
long rm_ct;
long rm_x;
long rm_y;
long rm_status;
};
struct PrtMsg pm;
struct RenderMsg rm;
long SyncMsg(struct PrtMsg *m) {
struct MsgPort *ProcPort;
m->pm_Msg.mn_ReplyPort = (struct MsgPort*)FindTask(0); /* this cast is safe -- we'll
uncast this later */
Forbid();
ProcPort = FindPort("FAXPRINTERMP");
if (ProcPort) PutMsg(ProcPort, &m->pm_Msg);
Permit();
if (ProcPort) {
do {
Wait(SIGF_SINGLE);
} while (m->pm_Msg.mn_Node.ln_Type != NT_REPLYMSG);
}
return m->pm_rc;
}
int MsgRender(long ct, long x, long y, long status) {
rm.rm_PrtMsg.pm_Type = PM_RENDER;
rm.rm_ct = ct;
rm.rm_x = x;
rm.rm_y = y;
rm.rm_status = status;
if (status == 5) {
SetDensity(x & SPECIAL_DENSITYMASK);
}
return SyncMsg((struct PrtMsg*)&rm.rm_PrtMsg);
}
int Close(struct printerIO *ior) {
pm.pm_Type = PM_CLOSE;
SyncMsg(&pm);
return(0);
}
int Open(struct printerIO* ior) {
rm.rm_PrtMsg.pm_Type = PM_OPEN;
/* the casts here are safe -- we're going to uncast them when this message
gets to the faxprinterdaemon */
rm.rm_ct = (long)PED;
rm.rm_x = 0;
rm.rm_y = 0;
rm.rm_status = (long)PD;
SyncMsg((struct PrtMsg*)&rm);
return(0);
}
#define LPI 7
#define CPI 15
#define QUALITY 17
#define INIT_LEN 30
#define LPP 7
#define FORM_LEN 11
#define LEFT_MARG 3
#define RIGHT_MARG 7
#define MARG_LEN 12
int DoSpecial(UWORD* command, char outputBuffer[], BYTE* vline, BYTE* currentVMI, BYTE* crlfFlag, UBYTE Parms[]) {
rm.rm_PrtMsg.pm_Type = PM_DOSPECIAL;
rm.rm_ct = 0;
rm.rm_x = 0;
rm.rm_y = *vline;
rm.rm_status = *command;
return SyncMsg((struct PrtMsg*)&rm);
}
int ConvFunc(char* buf, char c, int flag) {
rm.rm_PrtMsg.pm_Type = PM_CONVFUNC;
rm.rm_ct = 0;
rm.rm_x = 0;
rm.rm_y = flag;
rm.rm_status = c;
SyncMsg((struct PrtMsg*)&rm);
buf[0] = '\0';
return(0); /* -1 == pass all chars back to the printer device */
}